package com.share.device.service.impl;


import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.share.common.core.exception.ServiceException;
import com.share.device.service.IMapService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

@Service
public class MapServiceImpl implements IMapService {

    @Autowired
    private RestTemplate restTemplate;

    //腾讯地图api key
    private final String key = "A4ABZ-32GC5-FDSIG-IHSKY-FSR77-MWBTO";

    //计算当前地点到指定地点的距离
    //参数：当前点的经纬度，目标点的经纬度
    @Override
    public Double calculateDistance(String startLongitude, String startLatitude,
                                    String endLongitude, String endLatitude) {

//        //通过RestTemplate远程调用
//        //调用腾讯提供的第三方接口，获取两点之间的最短距离
//        String url = "https://apis.map.qq.com/ws/direction/v1/walking/?from={from}&to={to}&key={key}";
//
//        //构建请求参数
//        Map<String,String> map = new HashMap<>();
//
//        map.put("from", startLatitude + "," + startLongitude); //起点
//        map.put("to", endLatitude + "," + endLongitude); //终点
//        map.put("key", key); //api key
//
//        //远程调用 参数：请求url，响应的对象类型，请求参数
//        JSONObject result = restTemplate.getForObject(url, JSONObject.class, map);
//
//        if (result.getIntValue("status") != 0){
//            System.out.println("腾讯地图api错误信息："+result.getString("message"));
//
//            //远程请求失败
//            throw new ServiceException("地图服务调用失败");
//        }
//
//        //获取所有路径
//        JSONArray distanceArr = result.getJSONObject("result").getJSONArray("routes");
//
//        //第一个为最短的路径
//        JSONObject route = distanceArr.getJSONObject(0);
//        //最短路径长度值
//        double nearestDistance = route.getBigDecimal("distance").doubleValue();
//
//        return nearestDistance;


        //测试用：测试用模拟数据
        Random random = new Random();
        BigDecimal randomDouble = BigDecimal.valueOf(random.nextDouble(100));

        // 保留两位小数，并进行四舍五入
        BigDecimal roundedValue = randomDouble.setScale(1, RoundingMode.HALF_UP);
        double roundedDoubleValue = roundedValue.doubleValue();
        return roundedDoubleValue;
    }
}
